歡迎大家再次回來我們這個系列,昨天我們已經介紹過幾個基本可以用在 Face recognition
上的 loss 了,如下圖如人類在 Face Recognition
領域上所研究的 loss
發展圖中的 Softmax loss
,Contrastive loss
,Triplet-loss
,Center-loss
以及feature normalize
的研究:
那今天我們將繼續往下走來到近來最流行的 loss 類別--Large Marginal Loss
Large Marginal Loss
這個 loss 其實是由 softmax loss(cross entropy loss)
所發展而來的,並且有多種變形,毫不畏言的是基本上你聽過目前有名的 face recognition loss
都是在這個範疇內!我們們先來講講這個變形的由來:
Step.1 一個基本的 softmax loss
如下:
其中 w
& b
為最後一層 fully connected layer
的參數,如下圖:
Step.2 展開 softmax loss
公式成為以下形式:
其中
這個視角你可以想做:
每個
w
為那個類的中心vector
,那我們的訓練目標其實就是希望每個image
壓出來的feature
都可以與他那一類的中心vector
相近
另外這個w
舞們也可以稱作proxy
,我們是視作這個類的中心代理(前篇center loss
的中心為各個訓練資料的feature
的平均值)
Step.3 我們把fully connected layer
中weight(w)
做 normalize
並假設這個 bias
為 0 :
那整體的 softmax loss
就可以改成modified softmax loss
,如下圖:
為什麼可以把 weight
做 normalize
主要是normface實驗發現有做 normalize
更好(這也稱為 Norm-softmax
),詳可見昨天介紹或下方實驗:
為什麼更進一步可以把 bias
設成 0 主要是Sphereface實驗發現可以刪掉並且 performance 沒什麼變化甚至有時表現可能可以更好!
而以上這兩種修改法其實也正式分別為‵Normface‵ 以及 Sphereface
Step.4 加入 Margin
經過上述步驟,感覺好像只是改寫 softmax loss
的形式而已,還沒有什麼大改?你說得沒錯,我們並還沒加入 margin
的概念,我們先觀察下圖的畫面:
我們可以看到上述左邊改版的 softmax
一樣只會找到各個類的類邊界,剛剛的分開就好,這個在 close-set
時或許沒問題,但在Open-set
就會發生兩人 feature
在空間中的交界處如果出現第三人的 feature
會分不開,因此我們會希望在訓練時能夠像右邊的效果一樣,盡可能與自己的類中心靠近,因此這就需要引入 Margin
的概念,modefied softmax
可以繼續改寫成以下 marginal loss
:
其中一共有三種主流變形,連同 softmax
其各自的關鍵參數如下:
|Name | M1 |M2|M3
|-----|----|--|--
|Softmax loss | 1 |0|0
|Sphereface|m1|0|0
|Arcface|1|m2|0
|Cosface|1|0|m3
這當中,softmax
以及Shpereface
已於前面小節介紹過了,舞們這裡介紹一下改變 M1
大小是否有幫助?如下圖,我們可以看到 m1
越大的時候其實可以分得越開,後續的 Large Marginal loss
基本上都會遵從大的 M1
(ex.cosface
& Arcface
實務上都是大 M1
:
在參考更強大 margin
下我們有了 Cosface
以及 Arcface
這兩個非常經典的 Large Marginal loss
那這兩個又是什麼的形式以及這兩個又熟強熟弱呢?
這個誰優誰劣其實不好說,那筆者根據自身經驗來跟大家說明:
1.研究上(論文上)
依照研究上我們最簡單可以直接參考主流 Benchmark
測試集來看效果,那基本上一定是 Arcface
會比較好,如下圖:
2.實務上
實務上,筆者自身經驗會是:
Cosface
比Arcface
簡單好用,並且更容易收斂
那關於為何會有這樣的效果,筆者目前還未完全掌握,但可以從以下兩部份講 CosFace
為何是個好選擇:
2-1. Cosface
收斂效果足以
會覺得 Cosface
不夠收斂可能是因為 Arcface
論文中這張圖:
依照 Arcface
這張圖的說明當今天訓練資料與類中心今天達到黏在一起時(角度為0)Cosface
的 target logit
還不是 1(我們希望是 1 ,因為這樣 inner product
為貼在一起的意思),並且觀察 Cosface
的斜率也會擔憂這樣 gradient
的大小足夠大嗎?訓練出來的同類相似度夠大嗎?其實到不用擔心這一點,我們可以看到 Arcface
自己本身做的訓練追宗圖如下:
可以看到其實 Arcface
到結束他也沒辦法讓角度為0,而這個角度差距我們拿 Cosface
的最貼緊的角度 inner product
結果 0.8 來算是差不多的!(可自行查一下 arccos(0.6)
是幾度)
2-2. marginal 反效果
如見下圖,我們可以看到當今天 arcface 在訓練時,訓練資料與類中心角度超過 135度時,他的 target logit
會越來越大(target logit
越大代表角度越小才對),這樣 gradient
會是相反的,你可以看到其他的 loss 像是 cosface 會是越來越小的
我們今天介紹了 Face recogntion loss
中的 Large Marginal Loss
,並且介紹了其中幾個知名的變種以及由來,並針對 Cosface
以及 Arcface
做了一個比較,希望能對大家更好了解 Face recognition
的訓練。歡迎大家明晚繼續回來!
1.Wang, Feng, et al. "Normface: L2 hypersphere embedding for face verification." Proceedings of the 25th ACM international conference on Multimedia. 2017.
2.Liu, Weiyang, et al. "Sphereface: Deep hypersphere embedding for face recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.
3.Deng, Jiankang, et al. "Arcface: Additive angular margin loss for deep face recognition." Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019.
4.Wang, Hao, et al. "Cosface: Large margin cosine loss for deep face recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
5.Li, Xianyang, et al. "Airface: Lightweight and efficient model for face recognition." Proceedings of the IEEE/CVF International Conference on Computer Vision Workshops.2019.